﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;

namespace FlyShop
{
    public partial class FrmCadastroCidade : Form
    {

        // Indica se o form está em modo de edição
        public bool edicao = false;

        // Código do registro a ser alterado
        public int codCidade = 0;

        OleDbConnection conexao;
        OleDbCommand comando;
        String strConexao = "Provider=MSDAORA.1;Data Source=localhost;Persist Security Info=True;User ID=pi;Password=pi";
        String sqlInsere = "insert into cidade (cod_cidade, nome, uf, pais) values ((select nvl(max(cod_cidade), 0) + 1 from cidade), ?, ?, ?)";
        String sqlUpdate = "update cidade set nome = ?, uf = ?, pais = ? where cod_cidade = ?";
        String sqlConsulta = "select * from cidade where cod_cidade = ?";
        OleDbParameter pCod, pUf, pNomeCidade, pPais;


        public FrmCadastroCidade()
        {
            InitializeComponent();
        }

        private void FrmCadastroCidade_Load(object sender, EventArgs e)
        {
            conexao = new OleDbConnection(strConexao);
            conexao.Open();

            // Se estiver em modo edição, recupera o registro
            // no banco e mostra-o no formulário
            if (edicao) 
            {

                comando = new OleDbCommand(sqlConsulta, conexao);

                pCod = new OleDbParameter("cod_cidade", OleDbType.Integer);
                pCod.Value = codCidade;
                comando.Parameters.Add(pCod);

                OleDbDataReader dr = comando.ExecuteReader();

                if (dr.Read())
                {
                    txtCidade.Text = dr["nome"].ToString();
                    cbUnidadeFederativa.SelectedItem = dr["uf"];
                }
                else 
                {
                    MessageBox.Show("Erro - Edição?");
                    this.Close();    
                }


            }
            

        }

        private void FrmCadastroCidade_FormClosed(object sender, FormClosedEventArgs e)
        {
            conexao.Close();
        }

        private void btnCadastrar_Click(object sender, EventArgs e)
        {


            // Verifica se os campos estão preenchidos
            if (cbUnidadeFederativa.SelectedItem != null && txtCidade.Text.Length > 3)
            {

                // Configura o comando de acordo com o estado (edição ou novo)
                if (edicao)
                {
                    comando = new OleDbCommand(sqlUpdate, conexao);


                    // Parâmetros
                    pNomeCidade = new OleDbParameter("nome", OleDbType.VarChar);
                    pNomeCidade.Value = txtCidade.Text.Trim();
                    comando.Parameters.Add(pNomeCidade);


                    pUf = new OleDbParameter("uf", OleDbType.VarChar);
                    pUf.Value = cbUnidadeFederativa.SelectedItem.ToString();
                    comando.Parameters.Add(pUf);

                    pPais = new OleDbParameter("pais", OleDbType.VarChar);
                    pPais.Value = "Brasil"; // Por enquanto o sistema tem apenas abrangência nacional
                    comando.Parameters.Add(pPais);

                    pCod = new OleDbParameter("cod_cidade", OleDbType.Integer);
                    pCod.Value = codCidade;
                    comando.Parameters.Add(pCod);

                    // Update
                    comando.ExecuteNonQuery();

                    // Fecha o formulário quando é edição
                    this.Close();

                }
                else
                {

                    // Configura o comando de acordo com o estado (edição ou novo)
                    comando = new OleDbCommand(sqlInsere, conexao);


                    // Instancia os parâmetros
                    pNomeCidade = new OleDbParameter("nome", OleDbType.VarChar);
                    pNomeCidade.Value = txtCidade.Text.Trim();
                    comando.Parameters.Add(pNomeCidade);

                    pUf = new OleDbParameter("uf", OleDbType.VarChar);
                    pUf.Value = cbUnidadeFederativa.SelectedItem.ToString();
                    comando.Parameters.Add(pUf);

                    pPais = new OleDbParameter("pais", OleDbType.VarChar);
                    pPais.Value = "Brasil"; // Por enquanto o sistema tem apenas abrangência nacional
                    comando.Parameters.Add(pPais);

                    // Insert
                    comando.ExecuteNonQuery();

                    // Verifica se o usuário deseja inserir um novo registro
                    DialogResult resultado = MessageBox.Show(this,
                                                            "Cadastrado com sucesso.\nDeseja cadastrar outro registro?",
                                                            "Cadastro",
                                                             MessageBoxButtons.YesNo);

                    if (resultado == DialogResult.Yes)
                    {
                        // Limpa os campos
                        cbUnidadeFederativa.SelectedItem = null;
                        txtCidade.Clear();
                    }
                    else
                    {
                        this.Close();
                    }

                }

            }
            else
            {
                MessageBox.Show(this,
                    "Preencha os campos corretamente.",
                    "Validação",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
            }


        }

        
        private void txtCidade_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
                btnCadastrar_Click(sender, e);
        }

        private void FrmCadastroCidade_KeyDown(object sender, KeyEventArgs e)
        {
            //Hotkey para salvar os dados
            if (e.KeyData == (Keys.Control | Keys.S))
            {
                btnCadastrar_Click(sender, e);
            }

            //Hotkey para a tecla ESC fechar a janela
            if (e.KeyData == (Keys.Escape))
            {
                this.Close();
            }
        }
    }
}
